import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/zh-cn'

// 加载插件
dayjs.extend(relativeTime)
dayjs.locale('zh-cn')

/**
 * 日期时间格式化
 * @param {String|Date} date - 日期或日期字符串
 * @param {String} format - 格式化模式
 * @returns {String} 格式化后的日期字符串
 */
export function formatDateTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return '--'
  return dayjs(date).format(format)
}

/**
 * 日期格式化
 * @param {String|Date} date - 日期或日期字符串
 * @param {String} format - 格式化模式
 * @returns {String} 格式化后的日期字符串
 */
export function formatDate(date, format = 'YYYY-MM-DD') {
  if (!date) return '--'
  return dayjs(date).format(format)
}

/**
 * 相对时间格式化
 * @param {String|Date} date - 日期或日期字符串
 * @returns {String} 相对时间描述
 */
export function formatRelativeTime(date) {
  if (!date) return '--'
  return dayjs(date).fromNow()
}

/**
 * 格式化货币金额
 * @param {Number} amount - 金额
 * @param {String} currency - 货币符号
 * @param {Number} decimals - 小数位数
 * @returns {String} 格式化后的货币金额
 */
export function formatCurrency(amount, currency = '¥', decimals = 2) {
  if (amount === null || amount === undefined) return '--'
  return `${currency} ${parseFloat(amount).toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`
}

/**
 * 格式化文件大小
 * @param {Number} size - 文件大小（字节）
 * @returns {String} 格式化后的文件大小
 */
export function formatFileSize(size) {
  if (!size) return '0 B'
  
  const units = ['B', 'KB', 'MB', 'GB', 'TB']
  let i = 0
  while (size >= 1024 && i < units.length - 1) {
    size /= 1024
    i++
  }
  
  return `${size.toFixed(2)} ${units[i]}`
}

export default {
  formatDateTime,
  formatDate,
  formatRelativeTime,
  formatCurrency,
  formatFileSize
} 